home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / Rewrite 0.2.6 / Sample Project / r.setup < prev   
Encoding:
Text File  |  1995-08-23  |  1.6 KB  |  54 lines  |  [TEXT/ReWr]

  1. (* =======================small examples =================== *)
  2.  
  3. factorial[0] -> 1;
  4. factorial[n:int] -> n*factorial[n-1];
  5.  
  6. fib[0] -> 1;
  7. fib[1] -> 1;
  8. fib[n:int] -> fib[n-1]+fib[n-2];
  9.  
  10. joinx[x:lis,y:lis] -> {.x,.y};
  11.  
  12. sort[{.a,b,c,.d}]::b>c -> sort[{.a,c,b,.d}];
  13. sort[x] -> x;
  14.  
  15. (* ========================== nprime ====================== *)
  16.  
  17. nprime[n:int] -> primeaux[{},{},n,2];
  18.  
  19. (* primeaux[(primes found so far <= sqrt[k]), (primes found so far > sqrt[k]), number found, this try] *)
  20. primeaux[l1:lis,l2:lis,0,k:int] -> k-1;
  21. primeaux[l1:lis,{s,.l2},n:int,k:int]::k>=s*s -> primeaux[{.l1,s},l2,n,k];
  22. primeaux[{.a,b:int,.c},l2:lis,n:int,k:int]::k%b=0 -> primeaux[{.a,b,.c},l2,n,k+1];
  23. primeaux[l1:lis,l2:lis,n:int,k:int] -> primeaux[l1,{.l2,k},n-1,k+1];
  24.  
  25. (* ==========================  atoi2 ======================= *)
  26.  
  27. atoi2[.x] -> xatoix[xatoi[.x]];
  28.  
  29. xatoix[x:int] -> x;
  30. xatoix[.x] -> "error - not a number";
  31.  
  32. xatoi["-",.n] -> xnegx[xatoi[.n]];
  33. xatoi["$",.a] -> xatoih[0,.a];
  34. xatoi["%",.a] -> xatoib[0,.a];
  35. xatoi[x:char,.a]::xisdigit[x] -> xatoix[0,x,.a];
  36. xatoi[.a] -> {},.a;
  37.  
  38. xnegx[{},.rest] -> {},.rest;
  39. xnegx[a:int,.rest] -> -a,.rest;
  40.  
  41. xatoix[x:int,d:char,.n]::xisdigit[d] -> xatoix[10*x+d:int-"0":int,.n];
  42. xatoix[x:int,.n] -> x,.n;
  43.  
  44. xatoih[x:int,d:char,.n]::xisdigit[d] -> xatoih[16*x+d:int-"0":int,.n];
  45. xatoih[x:int,d:char,.n]::d>="A" & d<="F" -> xatoih[16*x+10+d:int-"A":int,.n];
  46. xatoih[x:int,d:char,.n]::d>="a" & d<="f" -> xatoih[16*x+10+d:int-"a":int,.n];
  47. xatoih[x:int,.n] -> x,.n;
  48.  
  49. xatoib[x:int,"0",.n] -> xatoib[2*x,.n];
  50. xatoib[x:int,"1",.n] -> xatoib[2*x+1,.n];
  51. xatoib[x:int,.n] -> x,.n;
  52.  
  53. xisdigit[d:char] -> d>="0" & d<="9";
  54.